package de.javakicker;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.StringWriter;
import java.io.Writer;

import javax.swing.JOptionPane;

/**
 * The Class JavaKicker.
 */
public class JavaKicker {

	/**
	 * The main method.
	 *
	 * @param args the arguments
	 */
	public static void main(String[] args)
	{
		if (args.length < 2)
		{
			JOptionPane.showMessageDialog(null, 
											"Bitter per Konsole starten.\n" +
											"Parameter: <Team1Name> <Team2Name> [output.xml]", 
											"JavaKicker", 
											JOptionPane.PLAIN_MESSAGE);
			System.out.println("Parameter: <Team1Name> <Team2Name> [output.xml]");
			System.exit(1);
		}
		if (args.length > 0)
		{
			try {
				boolean debugmode = false;
				boolean path = false;
				// checken, ob ein Pfad zum Team angegeben wurde oder nur der Teamname
				if(args[0].contains("\\") || args[0].contains("/"))
					path = true;
				
				XmlLineup[] lineups = new XmlLineup[]
					{
						XmlLineup.load(args[0], path),
						XmlLineup.load(args[1], path)
					};
					
				
				Team.loadKickerTeams(lineups[0].getTeamName(), lineups[1].getTeamName());
				Team[] teams = new Team[2];
				teams[0] = Team.getTeam(lineups[0].getTeamName());
				teams[1] = Team.getTeam(lineups[1].getTeamName());
				
				
				
				if (teams[0] == null || teams[1] == null)
				{
					if (teams[0] == null)
						System.out.println("Team nicht gefunden: " + teams[0]);
					if (teams[1] == null)
						System.out.println("Team nicht gefunden: " + teams[1]);
					return;
				}
				
				Team.TEAM1 = teams[0];
				Team.TEAM2 = teams[1];
				
				if(args.length > 3)
					debugmode = args[3] == "qs" ? true : false;
				StringWriter writer = new StringWriter(1024);
				GameEngine engine = new GameEngine(teams, lineups, writer, false, debugmode);
				engine.play();
				
				// XML auf die Console ausgeben, wenn ein 4ter Parameter angegeben wurde.
				// Das ist fuer die Seppi Gruppe
				if(args.length > 3 && args[3] != "qs") {
					System.out.println(writer.toString());
				}
				else {  									// Sonst ganz normal in eine XML Datei schreiben
					File file;
					if(args.length > 2) {					// pruefen, ob eine Ausgabedatei angegeben wurde
						file = new File(args[2]);
						if(file.getParentFile() != null) 	//Eventuell fehlende Verzeichnisse erstellen
							file.getParentFile().mkdirs();
					}
					else {
						file = new File("output.xml");		// Standard Ausgabedatei
					}
					file.createNewFile();
					
					Writer writernew = new OutputStreamWriter(new FileOutputStream(file), "UTF8");
					writernew.write(writer.toString());
					writernew.close();
					System.out.println(file.getName() + " wurde erstellt.");
				}
				
				System.exit(0);
			}catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
}
